Electronic content store

ABSTRACT

In a method for storing and accessing objects in an electronic content store (e.g. for a Website), each object is assigned a version number, such that multiple instances of the same object with different version numbers may coexist. When accessing an object in the content store for reading or writing, a requested version number is specified. When reading an object, if an instance of that object with the requested version number exists in the content store, that instance of the object is returned, and otherwise the most recent older instance of that object is returned. When writing to an object, if an instance of that object with the requested version number exists in the content store, the write is performed to that instance of the object, and otherwise a copy is made of the most recent older instance of the object, the copy is assigned the requested version number, and the write is performed to the copy. This provides an efficient and convenient mechanism for managing versions of the content.

BACKGROUND TO THE INVENTION

This invention relates to a method and apparatus for storing andaccessing electronic content. The invention is particularly although notexclusively concerned with a content store for use in generatingwebsites.

By content is meant any information or goods that are deliveredelectronically to a consumer, either directly or indirectly. Forexample, content may be embodied in HTML pages and their associatedimages, and delivered directly to users through the World Wide Web.However, the advent of more general business (electronic business)applications has led to a corresponding generalisation in the definitionof content to include, for example:

Web pages and images.

Multimedia files (e.g. audio & video clips).

Streaming media.

Shopping catalogues.

“Soft” or “digital” goods for sale (e.g. downloadable music andsoftware).

Functionality, as embodied in CGI scripts and their modern equivalents.

Such content is generally held in some form of content store. Forexample, in a conventional website, the content store may be an ordinaryfilestore containing prepared HTML pages. Alternatively, in a dynamicwebsite, the content store may be a relational database holding rawdata, and publishing may use some dynamic page construction mechanismsuch as CGI or ASP, or a template rendering mechanism, to construct webpages when required.

Such content store may be required to be updated frequently, for exampleby modifying pages, adding new pages, and deleting old pages in awebsite. This presents a significant problem in managing theinformation. The object of the present invention is to provide a novelway of addressing this problem.

SUMMARY OF THE INVENTION

According to the invention, a method for storing and accessing objectsin an electronic content store comprises:

(a) assigning each object a version number, such that multiple instancesof the same object with different version numbers may coexist;

(b) when accessing an object in the content store for reading orwriting, specifying a requested version number;

(c) when reading an object, if an instance of that object with therequested version number exists in the content store, returning thatinstance of the object, and otherwise returning the most recent olderinstance of that object; and

(d) when writing to an object, if an instance of that object with therequested version number exists in the content store, performing thewrite to that instance of the object, and otherwise making a copy of themost recent older instance of the object, assigning the requestedversion number to the copy, and performing the write to the copy.

It will be shown that this provides an efficient and convenientmechanism for managing versions of the content.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 shows a computer network including a web server computer.

FIG. 2 shows the logical organisation of a content store.

FIG. 3 illustrates temporal versioning in the content store.

FIG. 4 illustrates the process of rendering a template in multiplephases.

FIG. 5 illustrates the use of active shortcuts to model differentwebsites using the same raw content.

FIGS. 6 and 7 illustrate the use of active shortcuts to model complexpages.

FIG. 8 shows an example of a resource schema.

DESCRIPTION OF AN EMBODIMENT OF THE INVENTION

One embodiment of the invention will now be described by way of examplewith reference to the accompanying drawings.

FIG. 1 shows a Web server computer 10, which hosts one or more websites.The Web server 10 can be accessed over a network 11 by a number ofclient devices 12. Typically, the network 11 may be the Internet or anin-house intranet. Each of the client devices 12 may for example be apersonal computer (PC), mobile phone, or interactive TV, and containsconventional browser software for accessing web pages from the webserver.

The Web server 10 includes a content store 13, a website publishingapplication 14, an administration interface 15, a template renderer 16,and a content store access service 17. The components 14-17 may all beimplemented as Java servlets.

Content Store

The content store 13 holds all the content for the website. It containsa set of objects, logically organised in a tree structure. Each objectrepresents either an actual item of content (such as a template, dynamicinformation to be inserted into a template, a partially renderedtemplate, or a fully rendered document), or a folder which may containother objects. The content store may be distributed, and accessed over anetwork using the standard WebDAV (Web-based Distributed Authoring andVersioning) protocol, or alternatively may be local. The content storemay simultaneously include many distinct implementations of the logicalmodel on different media, such as relational database managementsystems, filesystems, memory, XML documents, and so on.

Each object in the content store has a hierarchic address, whichidentifies its position in the tree structure. For example, FIG. 2 showsa portion of the content store, with objects identified by addressessuch as “/sport/news/football”. The root of the tree is indicated by“/”. The objects directly below an object in the tree structure arereferred to as its children; for example “/sport” has two children,“/sport/news” and “/sport/articles”. Conversely, an object directlyabove another object in the tree is referred to as its parent; forexample “/sport” is the parent of “/sport/news” and “/sport/articles”.

Each object in the content store has an internal structure, comprising acontent body and a number of properties. The properties may be furtherorganised into one or more property sheets, so that name clashes betweenstandard properties and those assigned by different groups ofindividuals are avoided. Property sheets provide a convenientvisualisation of the concept of XML namespaces as used in WebDAV.

The properties of an object can be addressed by appending a suffix ofthe form :propertysheet:property to the object address. For example,

/news/speeches/s1234:PUBLIC:speaker

addresses the speaker property on the PUBLIC property sheet of theobject at /news/speeches/s1234. If the property sheet is not specified,the PUBLIC property sheet is assumed by default.

An object can model any of the following items:

A simple file, where all the content is in the body, and is treated asjust an unstructured row of bytes or text characters. There may be somefixed properties, such as content length and modification date,corresponding to those of an ordinary file.

A document together with its metadata, i.e. information about thedocument such as its author, approval status, subject matter, defaultpublishing template and so on.

A fielded database record, where all the data is held in the properties,here having the role of database fields.

Combinations of the above, e.g. a fielded database record withassociated metadata.

Temporal Versioning

Each object in the content store has a temporal version numberassociated with it. This may be explicitly assigned to it, as one of theobject properties. The content store may thus contain several differentversions of a given object with the same address but different versionnumbers. The version numbers may, for example, relate to differentpublication dates or development phases. Higher version numbers indicatelater versions. A special marker object is used to indicate deletedcontent.

Any access to the content store access specifies an object address and arequested version number. The content store access service then accessesthe content store to select the appropriate version, according to thefollowing rules:

Read access. If an instance of the object with the requested versionnumber exists, it is read. However, if it is marked as deleted, it isdeemed not to exist. If an instance of the object with the requestedversion number does not exist, the most recent older version (i.e. withthe highest version number not greater than the requested versionnumber) is read.

Write access. If an instance of the object with the requested versionnumber exists, then it is modified as requested. Otherwise, a copy ismade of the most recent older version of the object, the copy is taggedwith the requested version number, and the modifications are applied tothis copy. The unmodified version is thus still available for viewing.

Deletion. A deletion marker object is created, and tagged with therequested version number. If an instance of the object already exists,with a version number exactly equal to the requested version number,that instance is deleted.

This means that a new system version can be created without making newcopies of unchanged content: the previous versions will continue to beused in the new system version until they are modified. When an objectis modified, a new copy is made automatically and transparently, andassigned the new version number, retaining the original unmodifiedversion with the original version number. Likewise, if an object isdeleted then it is merely marked as deleted at the new version number:the contents are retained in the content store labelled with theprevious version number.

Within these simple rules, versioning can be used in a number of ways,for both long-term strategic site redesigns or campaigns, and day-to-dayupdates. A simple approach assigns two current versions: version N for“live” publishing (i.e. what site visitors see), and version N+1 foradministering. This means that whatever site administrators do, theireffects are not visible on the live sites. At some appropriate time,when the new material is complete and behaves correctly, both the liveand administration versions are incremented, so the previousadministration version becomes visible to visitors, and a newadministration version is spawned. If necessary, the live site may beregressed back to its previous version. In addition, individualadministrators may choose to view different system versions, anddifferent sites may choose to publish from different system versions.

An example of temporal versioning is shown in FIG. 3. In this, it isassumed that the live, published site (P) is always one version numberbehind the administration version (A). Currently live versions are shownshaded. It can be seen that:

The current live version of the site is version 4. This is what visitorssee.

The current administration version of the site is version 5. This iswhat administrators see by default.

Object A has not changed since it was first published, so it continuesto be published in its original form at version 4.

Object B has been modified at version 4. The previous version remains incase we need to regress the live site.

Object C is a brand new object at version 4. If we regressed the livesite to version 3 it would seem to disappear.

Object D used to exist, but was deleted in a previous version, so it nolonger appears in the live site. It would reappear if we regressed toversion 2.

In the current administration site, objects A, B, C, and D remainunchanged, object E is deleted, and object F has been modified. Thesechanges do not yet affect the live site.

Templates

A template consists of a document (typically HTML) containing embeddedcommands that identify what information is to be inserted into thetemplate when it is rendered. These commands include WebDAV and othercommands, embedded in the document using XML syntax. These embeddedcommands are distinguished from conventional HTML tags by a “ds:”namespace.

Templates may reside in file store, or may be held in the content storeitself. Some examples of typical embedded commands that can be used intemplates will now be described.

Insert Command

The insert command retrieves or constructs some text, and then insertsit into an output stream. One possible format for the insert command is:

<ds:insert content=“SourceAddress” phase=“phaseNumber”/>

The SourceAddress attribute specifies the content store address of anobject or property whose contents are to be retrieved and inserted intothe output stream. For example, the command:

<ds:insert content=“/sport/news/000216”/>

retrieves the news article at address “/sport/news/000216” from thecontent store, and inserts it into the output stream.

The phaseNumber attribute specifies the expansion phase at which thisparticular command is to be performed. (See section below on multi-phaserendering). This attribute is optional; if omitted a default of zero isassumed.

Content properties can also be directly addressed, using the suffixnotation mentioned above. For example:

<ds:insert content=“/sport/news/000216:headline”/>

inserts the headline property associated with the news article.

The content attribute may be replaced by a shortcut attribute. Thisindicates that the object referred to is a shortcut (see below), and inthis case the value used will be the result of accessing the object as ashortcut.

Alternatively, the content attribute may be replaced by a src (source)attribute. This indicates a URL (Universal Resource Locator) which canbe used to access an object from an external website.

For Command

The for command is used to specify an iterative loop through a set ofobjects or values, repeating some processing for each. One possibleformat for this command is:

<ds:for content=“RootObject” filter=“Filter”>

Loop Body

</ds:for>

This command causes the enclosed Loop Body text to be repeated a numberof times, once for each object in the RootObject folder.

The Filter attribute is an expression involving comparison operators,which specifies a condition for selecting objects from this set. Forexample, the expression:

subject EQ football OR subject EQ golf selects objects whose subjectproperty is equal to either “football” or “golf”.

The content attribute may be replaced by a shortcut attribute. Thisindicates that the object referred to is a shortcut (see below), and inthis case the value used will be the result of accessing the object as ashortcut. If the shortcut has a filter property, this will be used as ifit had been supplied as an attribute in the command.

The following is an example of the usage of the for command:

<ds:for content=“/sport/news” filter=“this:subject EQ ‘football’”>

. . .

</ds:for>

This loops through all the articles in folder /sport/news, selectingonly those whose subject property is equal to “football”. This may beused, for example, to build an index page of news items relating tofootball.

A number of other “programming” commands (loops, conditions, procedures,variables etc.) are also provided, which may be used to produce verysophisticated and adaptive web pages.

Template Renderer

The template renderer 16 can be called (for example from the publishingapplication or from the administration interface), to render a specifiedtemplate. The result is an output string, which is passed back to thecaller.

A call to the template renderer contains the following arguments:

template The address in the content store of the template to berendered.

expansionPhase The phase to which the template is to be rendered.

contentVersion The temporal version number to be used in the renderingprocess.

argString An optional string of arguments.

When called, the template renderer first accesses the content store toget the specified template. It then parses the template, to identify anyembedded commands in it. When a command is identified, its phase isdetermined from its phase attribute; if there is no phase attribute, thephase is assumed to have the default value of zero. If the phase of thecommand is less than or equal to the expansionPhase argument specifiedby the call, the command is executed, and any text generated by thecommand is appended to the output string. If on the other hand the phaseof the command is greater than the expansionPhase argument, the commandis simply copied to the output string, (after expanding any expressionsin the command). Similarly, any parts of the template that are notembedded commands are simply copied to the output string.

Multi-phase Rendering

The ability to specify phases in the embedded commands, as describedabove, allows templates to be rendered in multiple phases. For example,a first phase may be performed as part of a batch process to insertrelatively static information into a template. The resultingpartially-rendered template would then be stored in the content store. Asecond phase would then be performed at run-time, to insert dynamicinformation, such as information specific to the current user.

FIG. 4 shows the process of rendering a template 40 in multiple phases(in this example, two phases). It is assumed that the template containsa number of embedded commands, and that some of these commands containthe attribute phase=“0” (or implicitly have this phase value by default)while others contain the attribute phase=“1”.

In step 41, the template renderer is initially called with theexpansionPhase argument set to 0. The template renderer will thereforeexecute all the embedded commands with phase=“0”, but will not executethe commands with phase=“1”. These commands may, for example, compriseinsert commands, which insert relatively static information 42 from thecontent store. The result of this step is a partially rendered template43, which still contains some embedded commands. This partially renderedtemplate is saved in the content store.

In step 44, at run time the template renderer is called again, inresponse to a request from a client browser, to render the partiallyrendered template 43. This time the expansionPhase argument is set to 1.The template renderer will therefore now execute all the remainingembedded commands. These commands may, for example, comprise furtherinsert commands, which insert dynamic information 45 from the contentstore. The result is an output page 46, which can then be returned tothe client browser. The output page 46 may be in any text-based formatsuch as HTML, XML, WML or ASCII, depending on the format of the originaltemplate.

If the content store is distributed, the output or source of therendering process may be remote, and so the phases could be performed ondifferent servers if required. For example, one batch server may feedseveral live websites. A “listener” feature is provided, whereby anapplication in a server can deduce whether something has changed, whichcan be used, for example, to trigger a rebuild or a cache flush.

Active Shortcuts

An active shortcut is an object whose body contains the address ofanother object (referred to as the target object). When the templaterenderer retrieves an active shortcut, it automatically accesses thecontent store again to retrieve the target object.

Active shortcuts may be used, for example, to allow an item of contentto appear in many locations in the content store without needingseparate copies. This is achieved by storing the item of content as atarget object, referenced by a number of shortcuts. With thisarrangement, if the target object is modified, the changes areimmediately reflected in all the references (shortcuts) to it.

Because active shortcuts are objects in their own right, they may haveproperties, including filter properties. These properties override theproperties of the target object. In particular, if the target object isa folder with a filter property, the shortcut may specify an alternativefilter. Thus, it is possible to define a shortcut to a folder whichreferences only items within the folder satisfying certain conditions,say only those news items about football.

Alternatively, the active shortcut may override a template property ofthe target object, so that the object looks different when viewedthrough the shortcut.

Declarative Modelling

In general, the structure of a website will reflect that of theunderlying raw content store. However, this may not always beappropriate. For example, the raw content might need to be organisedaccording to physical location (if it is distributed), or ownership.Furthermore, the content may be required to populate multiple websitesof different structures and with different selections in each. Keepingmultiple copies of content would consume space and incur anadministrative and performance overhead to keep them in step.

To solve this kind of problem we can use active shortcuts to buildalternative views on the same set of raw content. This is referred toherein as declarative modelling. The advantage of such a model is thatsymbolic operations on the model automatically result in operations inthe real world. For example, copying and pasting a shortcut into one ormore models causes the referenced content items to be published in thecorresponding websites.

An example of the use of active shortcuts for declarative modelling isillustrated in FIG. 5. In this example, the content store is dividedinto three sections 50-52, reflected by branches or groups of branchesin the content tree. The first section 50 contains raw content for usein all sites. The second section 51 contains models of the target sites.The third section 52 contains published sites themselves.

The raw content 50 is arranged for administrative convenience. Here, allnews items have been grouped into a single folder 53. “F” denotes itemsabout football, “T” about tennis, and “G” about golf.

The site models 51 contain appropriate folder structures, templates,brand images, and anything else that might be site-specific. Here wehave defined two sites 54,55; one about football, the other abouttennis. In most cases, actual content in these sites is replaced byshortcuts to items in the raw content store. Here we have includedshortcuts 56,57 to the news folder 53, with different filters so thatthe two sites include only appropriate articles.

When publishing occurs, the shortcuts are followed to retrieve the rawcontent, and to generate the target site 52. The properties defined inthe shortcuts are used to apply content filtering, template selection,and other customisations specific to the target sites. For staticpublishing, the whole of the target site is generated in advance andstored. For dynamic publishing, the target site 52 is a virtual site,the component pages of the target site being generated on demand.

Note that adding a news item to the raw content folder 53 willautomatically add the news item to any site to which it is relevant.

Modelling Complex Pages

In some cases, complex pages such as portals may also benefit fromdeclarative modelling. In this case, instead of a page being representedby a single object or template, the page is described by a subtree ofresources, each representing some page component such as a featured newsarticle or site index. Shortcuts are used so that components of the pagecan be changed just by redirecting the shortcut, without needing tochange the page itself or to write any new HTML.

An example of this is illustrated in FIG. 6. In this example, thecontent store is divided into sections 60,61; one for the raw contentand one for the target site models. Raw content is organised foradministrative convenience. Here we have two folders 62,63; one foreditorial articles and one for news items.

Site models are defined as before, but here the internal structure ofthe portal page has also been exposed. That is, the portal page ismodelled by a folder 64, which contains shortcuts 65-67 representingcomponents of the published page. The shortcuts point to objects in theraw content section 60; in this example, the shortcuts 65-67 pointrespectively to the news folder 63, a news item 69, and an article 68.The portal template may also generate indexes for folder shortcuts, andsummaries for resource shortcuts.

When the site is published, the shortcuts 65-67 are followed to buildthe portal page. FIG. 7 shows the resulting page. This consists of threepanes 70-72, which respectively display a news index, the news item 69,and the feature article 68, obtained through the shortcuts 65-67.

Re-routing any shortcut will cause the associated component of theportal to be updated. Similarly, adding or removing items to or from afolder will automatically alter any indexes.

Administration Interface

The administration interface 15 allows content to be browsed, copied,moved, tagged and similarly managed. It also provides a launchpad forother management functions, such as import/export and publishing.

The interface displays a screen containing two panels. The left panel isa conventional folding-tree view of the content store. It shows contentdown to the folder level. Folders may be expanded by clicking on a “+”icon, or selected by clicking on their icons.

The right panel shows details of the folder currently selected in thetree view. Resources (objects) within the selected folder may beselected by clicking on their icons. Tabs are provided to allow viewingof one or more properties sheets and a content sheet for the selectedobject.

The interface also provides a toolbar, which allows miscellaneousoperations to be performed on the selected object. Standard operationsinclude “cut”, “copy”, “paste”, “preview”, “select all”, “import/export”etc.

Resource Schema

Some of the objects held in the content store are class objects, whichdefine a set of classes for other objects in the store. The set ofavailable classes is collectively known as a resource schema. As will bedescribed, when creating a new object, a user can specify a class forthat object, and the new object will then automatically take on theproperties of that class.

An important feature of the schema is that it is represented as ordinaryobjects, and so all the ordinary content operations can apply to it. Inparticular, it can be accessed and modified by any of the normal methods(WebDAV, the User Interface, templates etc.), can be imported/exportedas XML, can have versioning and access control applied, and so on.Furthermore, if an administrator does not have access permission to anobject that happens to be part of a schema and describes some propertyin an object instance, then the administrator will not be able to seethe property in HTML forms when he or she updates object instances.

FIG. 8 shows an example of a resource schema. In this example, theschema includes a “News Folder” class object 80, which describes theattributes of News Folder objects. As shown, the News Folder classobject resides in a special “Classes” directory 81 in the treestructure. This directory may also contain other class objects (notshown).

The News Folder class object 80 has a set of properties 82, which defineattribute values shared by all members of this class. In particular, oneproperty 83 defines what types of child object a News Folder object mayhave. In this example, a News Folder object may have children of thefollowing three classes:

news items,

weather reports, and

other news folders for substructuring.

A class object may itself have a number of child objects, whichrepresent resources owned by the class. In this example, the News Folderclass object 80 has two child objects: a template object 84, used todisplay the list of news items, and a BGcolor (background color) object85, for use in the template. The BGcolor object has a set of properties,including a set of permitted background colors that can be used in thetemplate: in this case red, blue or green. Another property of theBGcolor object specifies the default color: in this case, red.

FIG. 8 also shows a “Sports News” directory object 87, which resides ina “Sports” directory 88. The Sports News directory is assumed to be amember of the News Folder class, as defined by the News Folder classobject 80, and so inherits the properties of that class. In particular,it uses the template object 84 as its default template for generatingweb pages, and uses the BGcolor object 85 to specify its backgroundcolors.

Creating a New Object

When a user desires to create a new object in the content store, theuser first uses the administration interface 15 to select an existingobject that is to be the parent of the new object. The administrationinterface toolbar includes a “Create new object” option. If this optionis selected, the administration interface automatically accesses theclass object corresponding to the selected object, to find the permittedclasses of child object for the selected object. A drop-down menu isdisplayed, listing these permitted classes.

If the user selects one of these permitted classes, the administrationinterface then automatically creates a new object of the selected class,giving it the properties of that class as specified by the class objectfor that class. The user can then edit the new object, if desired, forexample by inserting text or other content into it.

For example, referring to FIG. 8, if the user wishes to create a newobject in the Sports News directory, the user first selects thisdirectory and then clicks on the “Create new object” option. Theadministration interface will then access the News Folder class object80, and display a drop-down menu containing a list of the permittedchild objects for this class: namely News Item, Weather Report and NewsFolder. The user can then select one of these (say News Item), and theadministration interface will then automatically create a new object ofthis class.

Some Possible Modifications

It will be appreciated that many modifications may be made to the systemdescribed above without departing from the scope of the presentinvention.

For example, while the example described above is concerned withgenerating web pages, it will be appreciated that it could also be usedin for generating other types of document, for example in non-webapplications such as paper publishing and “digital dashboards”.

Also, while the above example describes two-phase rendering of atemplate, it will be appreciated that, if required, a template may berendered in more than two phases.

What is claimed is:
 1. A method for storing and accessing objects in anelectronic content store, the method including: (a) assigning eachobject a version number, such that multiple instances of the same objectwith different version numbers may coexist; (b) when accessing an objectin the content store for reading or writing, specifying a requestedversion number; (c) when reading an object, if an instance of thatobject with the requested version number exists in the content store,returning that instance of the object, and otherwise returning the mostrecent older instance of that object; (d) when writing to an object, ifan instance of that object with the requested version number exists inthe content store, performing the write to that instance of the object,and otherwise making a copy of the most recent older instance of theobject, assigning the requested version number to the copy, andperforming the write to the copy; (e) maintaining a first currentversion number relating to a current published version of the contentand a second, later current version number relating to a yet-to-bepublished administration version of the content; and (f) when it isrequired to publish the administration version, updating the firstcurrent version number to equal the second current version number, andupdating the second current version number to a new, later value,without changing the version numbers of the object.
 2. A methodaccording to claim 1 wherein a new object is created at a specifiedversion number by writing the new object to the content store with thespecified version number, replacing any existing instance of the objectwith the same version number.
 3. A method according to claim 1 whereinan object is deleted at a specified version number by writing to thecontent store an instance of the object with the specified versionnumber and marked as deleted, this instance replacing any existinginstance of the object with the same version number.
 4. A methodaccording to claim 3 wherein, when reading an object, if an instance ofthat object with the requested version number exists in the contentstore, but is marked as deleted, the object is deemed not to exist, evenif there exist instances of that object with different version numbers.5. A method according to claim 1 wherein when an object is deleted at aspecified version number, any instances of that object with differentversion numbers are not affected.
 6. A method according to claim 1wherein regression to a previous version of the content is achieved bychanging a current published version number to an earlier value.
 7. Amethod according to claim 1 wherein the objects in the content store arearranged in a tree structure, each object being identified by ahierarchical address, and different instances of an object having thesame hierarchical address but different version number.
 8. A methodaccording to claim 1 wherein said objects in the content store include aplurality of web pages.
 9. A web server including: (a) an electroniccontent store holding a plurality of objects, each object having aversion number, such that multiple instances of the same object withdifferent version numbers may coexist; (b) means for reading an objectwith a requested version number, by returning an instance of that objectwith the requested version number if much an instance exists in thecontent store, and otherwise returning the most recent older instance ofthat object; (c) means for writing to an object with a requested versionnumber, by performing the write to an instance of that object with therequested version number if such an instance exists in the contentstore, and otherwise making a copy of the most recent older instance ofthe object, assigning the requested version number to the copy, andperforming the write to the copy; (e) means for maintaining a firstcurrent version number relating to a current published version of thecontent and a second, later current version number relating to ayet-to-be published administration version of the content; and (f) meansoperative when it is required to publish the administration version, forupdating the first current version number to equal the second currentversion number, and for updating the second current version number to anew, later value, without changing the version numbers of the objects.10. A computer program product comprising a data carrier including acomputer program for performing a method for storing and accessingobjects in an electronic content store, the method including: (a)assigning each object a version number, such that multiple instances ofthe same object with different version numbers may coexists; (b) whenaccessing an object in the content store for reading or writing,specifying a requested version number; (c) when reading an object, if aninstance of that object with the requested version number exists in thecontent store, returning that instance of the object, and otherwisereturning the most recent older instance of that object; (d) whenwriting to an object, if an instance of that object with the requestedversion number exists in the content store, performing the write to thatinstance of the object, and otherwise making a copy of the most recentolder instance of the object, assigning the requested version number tothe copy, and performing the write to the copy; (e) maintaining a firstcurrent version number relating to a current published version of thecontent and a second, later current version number relating to ayet-to-be published administration version of the content; and (f) whenit is required to publish the administration version, updating the firstcurrent version number to equal the second current version number, andupdating the second current version number to a new, later value,without changing the version numbers of the objects.